package com.bytezero.thistest;
/**
 * 
 * @Description 
 * @author  Bytezero·zhenglei!      Email:420498246@qq.com
 * @version
 * @date 2021年9月15日下午7:38:02
 * @
 *
 */
/*
 * this关键字使用
 * 1.this可以用来修饰属性，方法，构造器
 * 
 * 2.this修饰属性和方法
 *   this理解为当前对象  或 当前正在创建的对象
 * 
 *   （1）在类的方法中，可以使用“this.属性”或“this.方法”的方式，调用当前对象属性
 * 或方法， 但是，通常情况下，我们都选择省略了“this."，特殊情况下，如果方法
 * 的形参和类的属性重名，我们必须显示式的使用“this.变量”的方式，表明此变量是
 * 属性，而非形参.
 * 
 *   （2）在类的构造器中，可以使用“this.属性”或“this.方法”的方式，调用当前正在创建的
 * 对象属性或方法， 但是，通常情况下，我们都选择省略了“this."，特殊情况下，如果构造器
 * 的形参和类的属性重名，我们必须显示式的使用“this.变量”的方式，表明此变量是
 * 属性，而非形参.
 * 
 *  3. this调用构造器
 *   (1) 我们在类的构造器中，可以显示的使用“this(形参列表)”方式，调用本类中的指定的其他
 * 构造器  
 *   (2)构造器不能通过“this(形参列表)”方式调用自己
 *   (3)如果一个类中有n个构造器，则最多有n - 1个构造器中使用了“this(形参列表)”
 *   (4)规定：this(形参列表)  必须声明当前构造器的首行
 *   (5)构造器内部，最多只能声明一个 this(形参列表)，用来调用其他的构造器
 *   
 *   
 * 
 */
public class PersonTest
{
	public static void main(String[] args) 
	{
		Person p1 = new Person();
		
		p1.setAge(2);
		System.out.println(p1.getAge());
		
		p1.eat();
		
		Person p2 = new Person("Tom");
		System.out.println(p2.getName());
		
	}
}


class Person
{
	private String name;
	private int age;
	
	
	//1
	public Person()
	{
		this.eat();
		String info = "已经被调用（）";
		System.out.println(info);
	}
	
	//当前正在创建的对象
	public Person(String name)
	{
		this(); //1 调了 1 这个构造器
		this.name = name;
	}
	
	public Person(int age)
	{
		this();
		this.age = age;
	}
	
	
	public Person(int age,String name)
	{
		this(age);
		//this.age = age;
		this.name = name;
	}

	
	
	
	public void setName(String name)
	{
		this.name = name;
	}
	
	public String getName()
	{
		return this.name;
	}
	
	
	
	public void setAge(int age)
	{
		this.age = age;
	}
	
	public int getAge()
	{
		return this.age;
	}
	
	
	public void eat()
	{
		System.out.println("人吃饭");
		this.study();
	}
	public void study()
	{
		System.out.println("人学习");
	}
	
	
	
	
	
	
	
	
}














































